/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.service;

import com.icinfo.cloud.provider.punish.common.documentdataload.dto.CaseDocumentRecordCommonQueryDto;
import com.icinfo.cloud.provider.punish.common.documentdataload.dto.CaseDocumentSingleRecordVo;
import com.icinfo.cloud.provider.punish.common.sign.dto.*;
import com.icinfo.cloud.provider.punish.common.sign.vo.SignSendFileVo;
import com.icinfo.cloud.provider.punish.execute.dto.SignExecuteQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseDocumentRecord;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.ucase.punishexecute.dto.DocumentOfUnExecuteQueryDto;
import com.icinfo.cloud.provider.punish.ucase.punishinform.vo.CaseCriminalTransferFileVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 描述: 案件文书记录表-TRJ case_document_record 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年02月15日
 */
public interface ICaseDocumentRecordService extends BaseService {


    /**
     * 【V1.0.0】描述：查询案件阶段环节关联文书信息
     *
     * @param queryDto {@link CaseStageLinkRelateDocumentQueryDto}
     * @return {@link List<CaseStageLinkRelateDocumentVo>} 案件阶段环节关联文书信息
     * @author xiangyuyu
     * @date 2022-02-24 14:29
     */
    List<CaseStageLinkRelateDocumentVo> getCaseStageLinkRelateDocumentInfo(CaseStageLinkRelateDocumentQueryDto queryDto);

    /**
     * 【V1.0.0】描述：根据唯一标识查询文书记录信息
     *
     * @param id 唯一标识
     * @return {@link CaseDocumentRecordVo} 文书记录信息
     * @author xiangyuyu
     * @date 2022-02-25 14:28
     */
    CaseDocumentRecordVo getCaseDocumentRecordInfo(String id);

    /***
     * 查询待签字文书
     * @author cyy
     * @date 2022/2/26
     * @param  signQueryDto
     * @return SignSendFileVo
     **/
    SignSendFileVo getUnSignDoc(SignQueryDto signQueryDto);

    /***
     * 接收签字捺印版已签字文书
     * @author cyy
     * @date 2022/2/26
     * @param  signReceiveDto
     * @return SignSendFileVo
     **/
    Map<String, Object> receiveSignDoc(SignReturnDto signReceiveDto);

    /***
     * 接收签字捺印版已签字文书
     * @author lxj
     * @date 2022/5/6
     * @param  signReceiveDto
     * @return Map
     **/
    Map<String, Object> receiveAppSignDoc(SignReturnDto signReceiveDto);
    /**
     * 删除文书记录
     *
     * @param caseDocumentRecordDelRequest
     * @return {@link int}
     * @author liyafeng
     * @date 2022/3/1
     */
    int delCaseDocumentRecordInfo(CaseDocumentRecordDelRequest caseDocumentRecordDelRequest);

    /**
     * 根据ID删除文书记录
     *
     * @param caseDocumentRecordDelRequest
     * @return {@link int}
     */
    int delCaseDocumentRecordById(CaseDocumentRecordDelRequest caseDocumentRecordDelRequest);

    /**
     * 描述：更新文书送达截止日期
     *
     * @param caseId              案件id
     * @param documentCatalogCode 文书目录编码
     * @author xiangyuyu
     * @date 2022-03-04 09:41
     */
    void updateDocumentSentDeadLine(String caseId, String documentCatalogCode);

    /**
     * 描述：计算送达截止日期
     *
     * @param caseId              案件id
     * @param documentCatalogCode 文书目录编码
     * @param sendLimitDay        送达期限
     * @param sendLimitType       送达期限类型
     * @param isContainStartDay   是否包含开始日期
     * @return LocalDate 送达截止日期
     * @author xiangyuyu
     * @date 2022-03-04 09:41
     */
    LocalDate calculateSentDeadLine(String caseId, String documentCatalogCode, Integer sendLimitDay, String sendLimitType, boolean isContainStartDay);

    /**
     * 描述：更新文书送达信息
     *
     * @param documentId 文书id
     * @param sentTime   送达时间
     * @param sendStatus 送达时间
     * @author xiangyuyu
     * @date 2022-03-04 09:41
     */
    void updateDocumentSentInfo(String documentId, LocalDateTime sentTime, String sendStatus);
    /**
     * 描述：获取文书信息
     *
     * @param queryDto 查询dto
     * @return {@link CaseDocumentRecordDetailVo }
     * @author shishengyao
     * @date 2022/03/04
     */
    CaseDocumentRecordDetailVo getCaseDocumentRecordDetail(CaseDocumentRecordQueryDto queryDto);
    /**
     * 描述：获取处罚告知文书信息
     *
     * @param queryDto 查询dto
     * @return {@link CaseDocumentRecordDetailVo }
     * @author shishengyao
     * @date 2022/03/04
     */
    CaseDocumentRecordDetailVo getPunishInformInfo(CaseDocumentRecordQueryDto queryDto);

    /**
     * 获取文书记录
     *
     * @param caseId 案件id
     * @return CaseDocumentRecord
     * @author lxj
     * @date 2022/3/6
     **/
    CaseDocumentRecord getCaseDocumentRecord(String caseId, String documentCatalogCode);

    /**
     * 获取文书记录
     *
     * @author: zhengqiang
     * @date: 2022/5/18
     * @param: caseId
     * @param: documentCatalogCode
     * @param: partyId
     * @return {@link CaseDocumentRecord}
     **/
    CaseDocumentRecord getCaseDocumentRecord(String caseId, String documentCatalogCode, String partyId);

    /**
     * 描述：获取案件有效文书列表
     *
     * @param caseId 案件id, caseAssistId 案件副流程id
     * @return {@link List<CaseDocumentRecord> }
     * @author shishengyao
     * @date 2022/04/07
     */
    List<CaseDocumentRecordDto> getCaseDocumentRecordList(String caseId, String caseAssistId);

    /**
     * 描述：根据caseId和documentKindCode获取文书记录
     *
     * @param caseId           案件id
     * @param documentKindCode 文件类型代码
     * @return {@link CaseDocumentRecord }
     * @author shishengyao
     * @date 2022/04/10
     */
    CaseDocumentRecordDto getCaseDocumentRecordByKindCode(String caseId, String documentKindCode);

    /**
     * 描述：根据caseId和documentKindCode、partyId获取文书记录
     *
     * @param caseId           案件id
     * @param documentKindCode 文件类型代码
     * @param partyId 当事人ID
     * @return {@link CaseDocumentRecord }
     */
    CaseDocumentRecordDto selectCaseDocumentRecordByKindCodeAndPartyId(String caseId, String documentKindCode, String partyId);

    /**
     * 描述：获取指定文书种类的文书记录
     *
     * @param documentKindCode 文书目录编码
     * @param sentDate         指定送达日期
     * @param createDate       文书创建时间
     * @return {@link List<CaseDocumentRecordVo>} 文书记录
     * @author xiangyuyu
     * @date 2022-04-14 11:04
     */
    List<CaseDocumentRecordVo> getCaseDocumentRecordListWithKindCode(String documentKindCode, String sentDate, String createDate);

    /**
     * 描述：根据指定条件查询文书记录信息
     *
     * @param queryDto {@link CaseDocumentRecordQueryDto}
     * @return List<CaseDocumentRecordVo> 文书记录信息
     * @author xiangyuyu
     * @date 2022-07-01 14:28
     */
    List<CaseDocumentRecordVo> getCaseDocumentRecordList(CaseDocumentRecordQueryDto queryDto);

    /**
     * 描述：根据指定条件查询撤销文书记录信息
     *
     * @param queryDto {@link CaseDocumentRecordQueryDto}
     * @return List<CaseDocumentRecordVo> 文书记录信息
     * @author xiangyuyu
     * @date 2022-07-01 14:28
     */
    List<CaseDocumentRecordVo> getCaseDocumentCxRecordList(CaseDocumentRecordQueryDto queryDto);

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的调查信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportInvestigateInfo();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的调查信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 16:02
     */
    List<String> getCaseIdListShouldReportInvestigateInfo(List<String> punishDecideCaseIdList);

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportInformInfo();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 16:02
     */
    List<String> getCaseIdListShouldReportInformInfo(List<String> punishDecideCaseIdList);


    /**
     * 【V2.0.0】描述：获取案件id列表-需要上报的听证类告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-06-15 10:30
     */
    List<String> getCaseIdListShouldReportHearingInformInfo();

    /**
     * 【V2.0.0】描述：获取案件id列表-需要上报的听证类告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 19:30
     */
    List<String> getCaseIdListShouldReportHearingInformInfo(List<String> punishDecideCaseIdList);


    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的决定信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportDecideInfo();

    /**
     * 【V2.0.0】描述：根据特定信息查询文书关键信息【所有文书通用】
     *
     * @param request {@link DocumentKeyInfoRequest}
     * @return {@link CaseDocumentKeyInfoVo} 文书关键信息
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    CaseDocumentKeyInfoVo getDocumentKeyInfoBySpecialCondition(DocumentKeyInfoRequest request);

    /**
     * 查询未执行的处罚决定书列表
     *
     * @author: zhengqiang
     * @date: 2022/5/31
     * @param: unExecuteFinishQueryDto
     * @return {@link List< CaseDocumentRecordVo>}
     **/
    List<CaseDocumentRecordVo> getDocumentRecordOfUnExecute(DocumentOfUnExecuteQueryDto documentOfUnExecuteQueryDto);

    /**
     * 描述：查询文书列表
     *
     * @param queryDto 查询dto
     * @return {@link List<CaseDocumentRecordVo> }
     * @author shishengyao
     * @date 2022/06/06
     */
    List<CaseDocumentRecordDetailVo> getCaseDocumentRecordDocNumberInfoList(CaseDocumentRecordCommonQueryDto queryDto);
    /**
     * 描述：获取文书信息
     *
     * @param queryDto 查询dto
     * @return {@link CaseDocumentRecordDetailVo }
     * @author shishengyao
     * @date 2022/03/04
     */
    CaseDocumentSingleRecordVo getCaseDocumentRecordForCommon(CaseDocumentRecordQueryDto queryDto);

    /**
     * 【V1.3.0】描述：根据环节编码撤回文书记录
     * @author tianrunjia
     * @date 2022-06-27
     * @return
     */
    void recallCaseDocumentRecordByCaseLinkCode(String caseId, String caseLinkCode);

    /**
     * 描述：获取app文书记录
     *
     * @param dto {@link AppCaseDocumentRecordDto}
     * @return List<AppCaseBeforeDocumentRecordVo> app文书记录
     * @author xiangyuyu
     * @date 2022-06-30 20:43
     */
    List<AppCaseBeforeDocumentRecordVo> getAppCaseBeforeDocumentRecordList(AppCaseDocumentRecordDto dto);

    /**
     * 签字捺印版未签字原文件发送
     *
     * @param signQueryDto
     * @return {@link SignSendFileVo}
     * @author liyafeng
     * @date 2022/8/18
     */
    SignSendFileVo getUnSignDoc(SignCaseSourceQueryDto signQueryDto);

    /**
     * 签字捺印版未签字原文件发送(裁执分离)
     *
     * @param signQueryDto
     * @return {@link SignSendFileVo}
     * @author liyafeng
     * @date 2022/8/18
     */
    SignSendFileVo getExecuteUnSignDoc(SignExecuteQueryDto signQueryDto);

    /**
     * 接收捺印板回传已签字文书-案源
     *
     * @param signReceiveDto
     * @return {@link Map< String, Object>}
     * @author liyafeng
     * @date 2022/8/18
     */
    int receiveSignDoc(SignCaseSourceReturnDto signReceiveDto);

    /**
     * 【V1.4.1】描述：副流程开始后更新副流程id
     *
     * @author tianrunjia
     * @Date 2022-08-24
     */
    void modCaseDocumentRecordWithAssistStart(String caseId, String catalogCode, String caseAssistId, String caseStageName, String caseStageCode
            , String caseLinkName, String caseLinkCode);

    /**
     * 【V1.4.1】描述：根据案件id获取案件阶段的所有有效文书
     *
     * @author tianrunjia
     * @Date 2022-08-24
     */
    List<CaseDocumentCatalogChainDetailVo> doGetAllCaseDocumentInfoEffectiveByCaseId(String caseId);

    /**
     * 【V1.10.0】描述：根据案件id获取案件详情中案件阶段的所有文书
     * @author tianrunjia
     * @Date 2022-12-11
     */
    List<CaseDocumentRecordInfo> doCaseDetailStageDocumentRecordByCaseId(String caseId, String busiParamId);

    /**
     * 获取文书记录以寻找相关文号
     *
     * @param caseId 案件id
     * @return CaseDocumentRecord
     * @author tianrunjia
     * @date 2022-09-04
     **/
    List<CaseDocumentRecord> getCaseDocumentRecordListFindNumSerial(String caseId, String documentCatalogCode);

    /**
     * 告知书/决定书 关联的补正/更正文书记录（包含撤回和正常状态，不包括修改）
     *  @param caseId 案件id
     * @param relationDocumentId 告知书/决定书 文书记录表idList
     * @param documentCatalogCode 补正/更正文书
     * @return CaseDocumentRecord
     **/
    List<CaseDocumentRecord> getCaseCorrectDocumentRecordListFindNum(String caseId, List<String> relationRecordIds, String documentCatalogCode);

    /**
     * 获取告知书/决定书 有文号的记录（包含撤回和正常状态，不包括修改）
     *  @param caseId 案件id
     * @param documentCatalogCode 告知书/决定书
     * @return CaseDocumentRecord
     **/
    List<CaseDocumentRecord> getCaseDocumentRecordHasDocumentNumber(String caseId, String documentCatalogCode);

    /**
     * 【1.5.0】查询涉刑案件文书列表
     *
     * @param caseId 用例id
     * @return {@link List< CaseCriminalTransferFileVo > }
     * @author shishengyao
     * @date 2022/09/29
     */
    List<CaseDocumentRecordCriminalDto> getDocumentRecordOfCriminal(String caseId);

    /**
     * 描述：查询文书记录
     *
     * @param queryDto 查询dto
     * @return {@link List<CaseDocumentRecordDto> }
     * @author shishengyao
     * @date 2022/10/24
     */
    List<CaseDocumentRecordDto> getDocumentRecordDtoList(CaseDocumentRecordQueryDto queryDto);

    /**
     * 接收签字捺印版已签字文书(海康)
     *
     * @param saveDto 保存dto
     * @return {@link Map<String, Object> }
     * @author shishengyao
     * @date 2022/10/26
     */
    Map<String, Object> receiveHKSignDoc(SignSaveDto saveDto);
    /**
     * 查询处罚决定书信息
     * @param caseId
     * @return {@link Map<String, Object> }
     * @author wangfawei
     * @date 2022/12/06
     */
    CaseDocumentRecord getCaseDocumentRecordInfoByCaseId(String caseId);

    /**
     * 描述: 案件需要在浙里办进行操作的文书
     *
     * @param dto
     * @return java.util.List<com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseDocumentRecordZlbVo>
     * @author zhanghongqiang
     * @Date 2022/12/5
     */
    List<CaseDocumentRecordZlbVo> getCaseDocumentRecordZlb(CaseDocumentRecordZlbDto dto);

    /**
     * 描述: 浙里办送达地址确认书预览文书
     *
     * @param caseConfirmPreviewDto
     * @return java.util.Map<java.lang.String, java.lang.Object>
     * @author zhanghongqiang
     * @Date 2022/12/6
     */
    Map<String, Object> getZlbCaseConfirmPreview(CaseConfirmPreviewDto caseConfirmPreviewDto);

    /**
     * 描述: 浙里办签字完成调取接口，需要签字的文书通用
     * @author zhanghongqiang
     * @Date 2022/12/7
     * @param saveDto
     * @return java.util.Map<java.lang.String,java.lang.Object>
     */
    Map<String, Object> receiveZlbSignDoc(SignReturnDto saveDto);

    /**
     * 描述: 当前文书发送到浙里办签字确认
     *
     * @param saveDto
     * @return com.icinfo.framework.common.web.Result<java.util.Map < java.lang.String, java.lang.Object>>
     * @author zhanghongqiang
     * @Date 2022/12/8
     */
    int sendZlbSignDoc(sendSignDocZlbDto saveDto);

    /**
     * 描述: 浙里办送达地址确认书修改再提交
     *
     * @param caseConfirmPreviewDto
     * @return com.icinfo.framework.common.web.Result
     * @author zhanghongqiang
     * @Date 2022/12/8
     */
    Result<String> modZlbCaseConfirm(CaseConfirmPreviewDto caseConfirmPreviewDto);

    /**
     * 【1.9.4】描述：专题查询-文书查询
     *
     * @param dto {@link CaseDocumentPageDto}
     * @return {@link List<PageCaseDocumentVo>}
     * @author cds
     * @date 2022/12/9
     * @version 1.9.4
     */
    List<PageCaseDocumentVo> pageCaseDocumentRecord(CaseDocumentPageDto dto);

    /**
     * 案件移送文书列表
     *
     * @author liuyongfei
     * @date 2022/12/15
     * @param caseId 案件id
     * @return java.util.List<com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseDocumentRecordCriminalDto>
     */
    List<CaseDocumentRecordCriminalDto> getTransferDocumentRecordOfCriminal(String caseId);


    /**
     * 【V1.10.0】描述：APP端签字捺印案件流程滚动
     *
     * @param
     * @return
     * @author tianrunjia
     */
    Map<String, Object> doCaseRollByAppSignDoc(String caseId, String documentCatalogCode);

    /**
     * 描述：修改文书
     *
     * @param saveDto 保存dto
     * @return {@link DocumentRecordModifyReturnVo }
     * @author shishengyao
     * @date 2023/01/07
     */
    DocumentRecordModifyReturnVo modifyDocumentRecord(DocumentRecordModifyDto saveDto);

    /**
     * 描述：审批通过之后修改文书记录信息
     *
     * @param modifyDocumentId 修改文档id
     * @return int
     * @author shishengyao
     * @date 2023/01/07
     */
    int modifyDocumentRecordAfterApproval(String modifyDocumentId);

    /**
     * 获取文书记录列表
     * @param  caseId 案件id
     * @param  catalogCodeList 文书目录编码列表
     * @return 文书记录列表
     * @author lilihao
     * @date 2023/2/7 14:45
     */
    List<CaseDocumentRecord> getDocumentRecordList(String caseId,List<String> catalogCodeList);

    /**
     * 修改文书内容/链接
     * @param id 文书id
     * @param documentContent 文书内容
     * @param documentUrl 文书链接
     * @return
     * @author lilihao
     * @date 2023/2/7 19:18
     */
    int modifyDocumentContent(String id,String documentContent,String documentUrl);

    /**
     * 【V1.11.0】描述： 获取关联文书记录
     *
     * @author: zhengqiang
     * @date: 2023/2/24
     * @param: caseId
     * @param: documentCatalogCode
     * @param: relationApprovalDocumentId
     * @return {@link CaseDocumentRecord}
     **/
    CaseDocumentRecord getRelationCaseDocumentRecord(String caseId, String documentCatalogCode, String relationApprovalDocumentId);

    /**
     * 【V1.11.0】描述： 获取关联文书记录
     *
     * @param: caseId
     * @param: relationDocumentId
     * @return {@link CaseDocumentRecord}
     **/
    CaseDocumentRecord getRelationCaseDocumentRecord(String caseId, String relationDocumentId);

    /**
     * 根据stageCode，查询文书列表
     * @param caseId
     * @param stageCode
     * @return
     */
    List<CaseDocumentRecordCodeNameVo> getCaseDocumentRecordByStageCode(String caseId, String stageCode, String busiParamId);

    /**
     * 【AJ-V1.1.1】描述： 转普通程序文书相关数据处理
     *
     * @author: zhengqiang
     * @date: 2023/3/10
     * @param: caseId
     * @return
     **/
    void dealCaseDocumentRecordOfChangeWorkFlow(String caseId);

    /**
     * 获取速结告知书
     * @param caseId
     * @return
     */
    List<CaseDocumentRecord> getCaseDocumentRecordOfSJCXGZS(String caseId);


    /**
     * 描述：更新文书为撤回作废状态
     *
     * @param caseId 案件id
     * @return int
     * @author shishengyao
     * @date 2023/03/28
     */
    int updateWithdrawCaseDocumentRecordForAdjust(String caseId);

    /**
     * 描述：删除当事人后将文书无效
     *
     * @param caseId  案件id
     * @param partyId 方id
     * @return int
     * @author shishengyao
     * @date 2023/03/29
     */
    int saveInvalidCaseDocumentRecordByPartyIdForAdjust(String caseId,String partyId);
    /**
     * 描述：根据caseId查询文书
     *
     * @param caseId
     * @return {@link List<CaseDocumentRecord> }
     * @author shishengyao
     * @date 2023/04/26
     */
    List<CaseDocumentRecord> getCaseDocumentRecordListByCaseId(String caseId);

    /**
     * 【V1.11.7】描述： 获取作出处罚决定书后，超过10个工作日未送达的决定信息
     *
     * @author: zhengqiang
     * @date: 2023/5/25
     * @return {@link List< String>}
     **/
    List<String> getCaseIdListDecideInfoAfterTenWorkDays();


    /**
     * 【V1.11.4】描述： 根据区划获取速结或快办告知书目录编码
     *
     * @author: zhengqiang
     * @date: 2023/4/19
     * @param: areaCode
     * @param: busiParamId
     * @return {@link String}
     **/
    String getDocumentCatalogCodeOfSJGZS(String areaCode, String busiParamId);
    /**
     * 简案快办修改文书
     * @author liyafeng
     * @date 2023/5/6
      * @param dto
     * @return {@link int}
     */
    int modFastCaseDocumentRecord(ModFastCaseDocumentRecordDto dto);
}
